{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 分析用户表"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 读取数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>User-ID</th>\n",
       "      <th>Location</th>\n",
       "      <th>Age</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>nyc, new york, usa</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>stockton, california, usa</td>\n",
       "      <td>18.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>moscow, yukon territory, russia</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>porto, v.n.gaia, portugal</td>\n",
       "      <td>17.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>farnborough, hants, united kingdom</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   User-ID                            Location   Age\n",
       "0        1                  nyc, new york, usa   NaN\n",
       "1        2           stockton, california, usa  18.0\n",
       "2        3     moscow, yukon territory, russia   NaN\n",
       "3        4           porto, v.n.gaia, portugal  17.0\n",
       "4        5  farnborough, hants, united kingdom   NaN"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_user = pd.read_csv(r'./1.用户冷启动/data/BX-Users.csv',sep=';')\n",
    "df_user.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 修改列名"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>location</th>\n",
       "      <th>age</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>nyc, new york, usa</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>stockton, california, usa</td>\n",
       "      <td>18.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>moscow, yukon territory, russia</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>porto, v.n.gaia, portugal</td>\n",
       "      <td>17.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>farnborough, hants, united kingdom</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   user_id                            location   age\n",
       "0        1                  nyc, new york, usa   NaN\n",
       "1        2           stockton, california, usa  18.0\n",
       "2        3     moscow, yukon territory, russia   NaN\n",
       "3        4           porto, v.n.gaia, portugal  17.0\n",
       "4        5  farnborough, hants, united kingdom   NaN"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_user.columns=['user_id','location','age']\n",
    "df_user.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 分析location"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['nyc, new york, usa', 'stockton, california, usa',\n",
       "       'moscow, yukon territory, russia', ...,\n",
       "       'sergnano, lombardia, italy', 'stranraer, n/a, united kingdom',\n",
       "       'tacoma, washington, united kingdom'], dtype=object)"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_user['location'].unique()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "london, england, united kingdom         2506\n",
       "toronto, ontario, canada                2250\n",
       "sydney, new south wales, australia      1744\n",
       "melbourne, victoria, australia          1708\n",
       "portland, oregon, usa                   1629\n",
       "                                        ... \n",
       "ubc, british columbia, canada              1\n",
       "banstead, england, united kingdom          1\n",
       "wormeldange, n/a, luxembourg               1\n",
       "liverpool, mersyside, united kingdom       1\n",
       "tona, barcelona, spain                     1\n",
       "Name: location, Length: 57339, dtype: int64"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "location_value_counts = df_user['location'].value_counts()\n",
    "location_value_counts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "57339"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "location_value_counts.count()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 平均每个地区，存在的用户个数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4.863321648441723"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "location_value_counts.sum() / location_value_counts.count()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "# location = 'nyc, new york, usa'\n",
    "# location.rsplit(',',maxsplit=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "# location.rsplit(',',maxsplit=1)[-1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "# location.rsplit(',',maxsplit=1)[-1].strip()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 把location变为国家"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_user['location'] = df_user['location'].apply(lambda location:location.rsplit(',',maxsplit=1)[-1].strip())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "709"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(df_user['location'].unique())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "usa               139711\n",
       "canada             21658\n",
       "united kingdom     18538\n",
       "germany            17043\n",
       "spain              13147\n",
       "                   ...  \n",
       "u.k.                   1\n",
       "kern                   1\n",
       "lj                     1\n",
       "canada eh              1\n",
       "london                 1\n",
       "Name: location, Length: 709, dtype: int64"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "location_value_counts = df_user['location'].value_counts()\n",
    "location_value_counts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(\n",
    "    range(len(location_value_counts)),\n",
    "    location_value_counts\n",
    ")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.pie(\n",
    "    location_value_counts,\n",
    "    labels = location_value_counts.index\n",
    ")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 分析 年龄"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0          NaN\n",
       "1         18.0\n",
       "2          NaN\n",
       "3         17.0\n",
       "4          NaN\n",
       "          ... \n",
       "278853     NaN\n",
       "278854    50.0\n",
       "278855     NaN\n",
       "278856     NaN\n",
       "278857     NaN\n",
       "Name: age, Length: 278858, dtype: float64"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_user.age"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0          True\n",
       "1         False\n",
       "2          True\n",
       "3         False\n",
       "4          True\n",
       "          ...  \n",
       "278853     True\n",
       "278854    False\n",
       "278855     True\n",
       "278856     True\n",
       "278857     True\n",
       "Name: age, Length: 278858, dtype: bool"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_user['age'].isnull()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>location</th>\n",
       "      <th>age</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>usa</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>russia</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>united kingdom</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>7</td>\n",
       "      <td>usa</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>8</td>\n",
       "      <td>canada</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>278849</th>\n",
       "      <td>278850</td>\n",
       "      <td>italy</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>278853</th>\n",
       "      <td>278854</td>\n",
       "      <td>usa</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>278855</th>\n",
       "      <td>278856</td>\n",
       "      <td>canada</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>278856</th>\n",
       "      <td>278857</td>\n",
       "      <td>usa</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>278857</th>\n",
       "      <td>278858</td>\n",
       "      <td>ireland</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>110762 rows × 3 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "        user_id        location  age\n",
       "0             1             usa  NaN\n",
       "2             3          russia  NaN\n",
       "4             5  united kingdom  NaN\n",
       "6             7             usa  NaN\n",
       "7             8          canada  NaN\n",
       "...         ...             ...  ...\n",
       "278849   278850           italy  NaN\n",
       "278853   278854             usa  NaN\n",
       "278855   278856          canada  NaN\n",
       "278856   278857             usa  NaN\n",
       "278857   278858         ireland  NaN\n",
       "\n",
       "[110762 rows x 3 columns]"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_user[\n",
    "    df_user['age'].isnull()\n",
    "]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "user_id     110762\n",
       "location    110762\n",
       "age              0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_user[\n",
    "    df_user['age'].isnull()\n",
    "].count()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 278858 entries, 0 to 278857\n",
      "Data columns (total 3 columns):\n",
      "user_id     278858 non-null int64\n",
      "location    278858 non-null object\n",
      "age         168096 non-null float64\n",
      "dtypes: float64(1), int64(1), object(1)\n",
      "memory usage: 6.4+ MB\n"
     ]
    }
   ],
   "source": [
    "df_user.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>location</th>\n",
       "      <th>age</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>usa</td>\n",
       "      <td>18.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>portugal</td>\n",
       "      <td>17.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>6</td>\n",
       "      <td>usa</td>\n",
       "      <td>61.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>10</td>\n",
       "      <td>spain</td>\n",
       "      <td>26.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>11</td>\n",
       "      <td>australia</td>\n",
       "      <td>14.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    user_id   location   age\n",
       "1         2        usa  18.0\n",
       "3         4   portugal  17.0\n",
       "5         6        usa  61.0\n",
       "9        10      spain  26.0\n",
       "10       11  australia  14.0"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_user_age_notnull = df_user[~df_user['age'].isnull()]\n",
    "df_user_age_notnull.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.0      416\n",
       "1.0      288\n",
       "2.0      105\n",
       "3.0       45\n",
       "4.0       28\n",
       "        ... \n",
       "230.0      1\n",
       "231.0      1\n",
       "237.0      1\n",
       "239.0      1\n",
       "244.0      1\n",
       "Name: age, Length: 165, dtype: int64"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "age_value_counts_sort_by_age = df_user_age_notnull['age'].value_counts().sort_index()\n",
    "age_value_counts_sort_by_age"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX8AAAD4CAYAAAAEhuazAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO3dfXTc1X3n8fd3RqPR85Ml+UGyLQPmwdgGjHGcEmiahGBIGggtXdKT4Lbp8TksadNt9myh2Z6T7C55aLrdNm3CHhqymCaB0iZZKCcJUAc2gVBA5snYxlh+wBY2kixLtjSSZjQzd/+Y35jBjKSRNE+a+bzOmTM/3fn9Zu71yB9f39/93Z855xARkfLiK3QFREQk/xT+IiJlSOEvIlKGFP4iImVI4S8iUoYqCl2BmbS2trqurq5CV0NEZEHZuXPnCedc21SvF334d3V10d3dXehqiIgsKGb25nSva9hHRKQMKfxFRMqQwl9EpAwp/EVEypDCX0SkDCn8RUTKkMJfRKQMKfyz7MnX+9nfN1LoaoiITEvhn0XOOf74gZf43A9eIh7XfRJEpHgp/LOofyTMSDjKvr4RHt11vNDVERGZksI/iw70jwJQHfDzN//2BtFYvMA1EhFJT+GfRQcGEuH/Z1su4OBAiIdfPlbgGomIpKfwz6IDAyFqK/3c+v4u1ixt4G937FfvX0SKksI/iw4MjHJOWx0+n7Ht6nM4cnKMvcc180dEio/CP4sODoQ4t60WgCtWtQDw4pGhQlZJRCQthX+WjEdivDU8zrltdQAsa6yivT7ISwp/ESlCCv8sOXZqHIDlLTUAmBmXrWjipaPDhayWiEhaCv8sCYWjANRXvXNztMtWNPPm4BiDo+FCVUtEJC2Ff5aMeuFfU5kS/subAHj0VV3wJSLFReGfJWPhGAC1Qf+ZsstXNvNr5y7iy/+6m5/qil8RKSIK/ywJRRI9/9rgOz3/Cr+Pe7dewSXLm/izH75K3+mJQlVPRORdFP5ZEkr2/FOGfQCqK/389e9cSiQW57/9655CVE1E5D0U/lky5vX8a1KGfZJWtdZy/dqlvKyZPyJSJBT+WZI84Xt2zz+ppbaS4bFIPqskIjIlhX+WjEViVAV8+H2W9vXG6gChSIxIVGv9iEjhKfyzJBSOTtnrB2iqCQBwanwyX1USEZmSwj9LQuHou2b6nK2xphKAU+Ma+hGRwlP4Z0koEqOm8r0ne5OaqhM9/+Ex9fxFpPAU/lkSCkepm6bnnxz2UfiLSDHIKPzN7LCZ7TKzl82s2ytrMbMnzGy/99ycsv+dZtZjZvvM7NqU8su99+kxs2+aWfqzowtQKBKjZrphn2qN+YtI8ZhNz/83nHOXOuc2ej/fAexwzq0Gdng/Y2ZrgFuAi4EtwLfNLDkecjewDVjtPbbMvwnFYSwcpXbaYZ/EmP+wwl9EisB8hn1uALZ729uBG1PKH3TOhZ1zh4AeYJOZLQUanHPPOucccH/KMQveTCd866sqMINTmusvIkUg0/B3wONmttPMtnlli51zxwG853avvAM4mnJsr1fW4W2fXf4eZrbNzLrNrHtgYCDDKhZWKBKbtufv8xmN1QH1/EWkKEzdVX23K51zx8ysHXjCzF6fZt904/humvL3Fjp3D3APwMaNG9PuU2zGItFpx/whMeNHJ3xFpBhk1PN3zh3znvuBHwObgD5vKAfvud/bvRdYnnJ4J3DMK+9MU77ghaMxJmNu2tk+gHr+IlI0Zgx/M6s1s/rkNvBR4DXgEWCrt9tW4GFv+xHgFjMLmtkqEid2n/eGhkbMbLM3y+fWlGMWtORa/tPN84fEhV4a8xeRYpDJsM9i4MferMwK4AfOuZ+Z2QvAQ2b2WeAIcDOAc263mT0E7AGiwO3OuZj3XrcB9wHVwE+9x4J3ZlG3DIZ9jgyG8lElEZFpzRj+zrmDwCVpygeBD09xzF3AXWnKu4G1s69mcRuLpF/L/2xNNRr2EZHioCt8syA0zVr+qZqqA5wanyQeXxDnsEWkhCn8syDkDfvMeMK3phLnYGgswie//Qzf3LE/H9UTEXkPhX8WhDI84bt2WQMA9z59iJeODPMPvzx45nyBiEg+KfyzIHkLx5nG/Dd2tbCotpJ7fnEQgJGJKD/c2TvtMSIiuaDwz4ITo2EAmmsrp93P7zM+ctFionHHxpXNXLaiiW892UP/6Yl8VFNE5AyFfxYcOTlGY3XgzMqd09mydgkA16xZzF03rmM0HGXbP+7USWARySuFfxYcPTnO8pbqjPa9+vw2/vuNa/nd961gzbIG/vSa83n56DDH1fsXkTxS+GfB0aExljfXZLSv32d8ZvNK6qsS/0tY3pI4biikK39FJH8U/vMUjzt6T46fCfHZavHOEwxp2QcRySOF/zz1j4SJxOJzDv9m7/aOJ9XzF5E8UvjP09GhMQCWN2c25n+25hrvDl9a6llE8kjhP09HBr3wn2PPv7E6gJl6/iKSXwr/eTo6NIYZdDTNredf4ffRWB3QmL+I5JXCf556h8Zprw9SFZh+aYfptNRUqucvInml8J+nvtMTLGmcW68/qbm2Uj1/Eckrhf88DYyEaasLzus9mmsqORnSCV8RyR+F/zydGA3TVj+/8G+pDegiLxHJK4X/PERjcQZDkXmHf3NtJSfHIjin9X1EJD8U/vNwMhTBOeYf/jWVRKLxM7eDFBHJNYX/PPSPJJZynu+Yf0uNlngQkfxS+M/DgLeOfzaGfQCGdNJXRPJE4T8PA17Pvz0LJ3wBTqrnLyJ5ovCfh2T4t85z2Cd5vO7oJSL5ovCfh4GRMPXBCqpnuHH7TJY0VgFw/JTCX0TyQ+E/DwNZmOMPEKzw01Yf5NjweBZqJSIyM4X/PAyMhGnNQvgDLGuq5i2Fv4jkScbhb2Z+M3vJzB71fm4xsyfMbL/33Jyy751m1mNm+8zs2pTyy81sl/faN83Mstuc/BoYyU7PH6CjqUo9fxHJm9n0/D8P7E35+Q5gh3NuNbDD+xkzWwPcAlwMbAG+bWbJQfG7gW3Aau+xZV61L6DeoTEOnQhx8bKGrLzfssZqjg1P6CpfEcmLjMLfzDqBjwHfSSm+AdjubW8Hbkwpf9A5F3bOHQJ6gE1mthRocM496xIJd3/KMQvOT3YdB+Dj65Zl5f2WNVUzPhnTHb1EJC8y7fn/DfBfgHhK2WLn3HEA77ndK+8Ajqbs1+uVdXjbZ5e/h5ltM7NuM+seGBjIsIr59eirx1nf2ciKRXO7g9fZlnk3g9G4v4jkw4zhb2YfB/qdczszfM904/humvL3Fjp3j3Nuo3NuY1tbW4Yfmz9vn5rg1d5TfGzd0qy9Z/JOYBr3F5F8qMhgnyuBT5jZ9UAV0GBm3wP6zGypc+64N6TT7+3fCyxPOb4TOOaVd6YpX3D2948AsL6zKWvvuawpMddf4S8i+TBjz985d6dzrtM510XiRO7PnXOfBh4Btnq7bQUe9rYfAW4xs6CZrSJxYvd5b2hoxMw2e7N8bk05ZkE5fCIEwKrW2qy9Z0ttJcEKH8d0oZeI5EEmPf+pfA14yMw+CxwBbgZwzu02s4eAPUAUuN05l1yr+DbgPqAa+Kn3WHAOnghRHfCzuCE70zwBzIwOzfUXkTyZVfg7554CnvK2B4EPT7HfXcBdacq7gbWzrWSxOXwiRFdrLdm+TGFZU7WGfUQkL3SF7xwcHhxjVWt2ZvmkWqYLvUQkTxT+sxSNxTl6coyuRdkb709a1lRN/0iYSDQ+884iIvOg8J+l3qFxonFHVxZP9iYta6rGOejT0s4ikmMK/1k6NJiY6XNODsK/Qxd6iUieKPxn6fhwolfe0Vyd9fdepgu9RCRPFP6zNBpOrL1TXxXI+nsvbdSFXiKSHwr/WRqdiGIGNYH53b0rnaqAn9a6St4a1pi/iOSWwn+WRsJR6ior8PlycysCzfUXkXxQ+M/S6ESUuqr5XBg9vc7mat70TiqLiOSKwn+WRsNR6oK5C/+LlzVyeHCMU+Na119EckfhP0uj4dz2/Nd3NgKwq/dUzj5DREThP0sjE7nt+a/vSCwT/UrvcM4+Q0RE4T9LoXCU+hz2/BtrAnQtqlHPX0RySuE/S7ke84fETWJeVc9fRHJI4T9LoxNR6oLZv8Ar1frORo6dmmBgJJzTzxGR8qXwn4V43DEaye0JX3jn9pDq/YtIrij8Z2FsMoZzUJ/jYZ+1HQ34DF7RuL+I5IjCfxZGJ6IAOe/511RWsLq9Xj1/EckZhf8sJBd1y/UJX0iM++/qPYVzLuefJSLlR+E/CyPJnn+ewn8wFNHa/iKSEwr/WRgN52fYB+DS5c0A/PvBkzn/LBEpPwr/WRjNY89/bUcDXYtq+Ofuozn/LBEpPwr/WRgJ5y/8zYzfuWI5zx06ycGB0Zx/noiUF4X/LCR7/rlc3iHVb2/oxO8z/u9Lb+Xl80SkfCj8ZyE55l+bh54/QHtDFee11bH72Om8fJ6IlI8Zw9/MqszseTN7xcx2m9mXvfIWM3vCzPZ7z80px9xpZj1mts/Mrk0pv9zMdnmvfdPMcnM7rBwZDUepCvgI+PP3b+Z57XX0aNhHRLIskxQLAx9yzl0CXApsMbPNwB3ADufcamCH9zNmtga4BbgY2AJ828ySN7y9G9gGrPYeW7LYlpxLLOqW23V9znZuex1HT44xMRnL6+eKSGmbMfxdQrLrGfAeDrgB2O6Vbwdu9LZvAB50zoWdc4eAHmCTmS0FGpxzz7rElUv3pxyzIJwan6QhT+P9Savb64g7OHRCt3YUkezJaPzCzPxm9jLQDzzhnHsOWOycOw7gPbd7u3cAqfMTe72yDm/77PIFY3gsQnNtZV4/87z2OgB6+jX0IyLZk1H4O+dizrlLgU4Svfi10+yebhzfTVP+3jcw22Zm3WbWPTAwkEkV8+JkaJLmmvwO+6xqrcVnsF/hLyJZNKszl865YeApEmP1fd5QDt5zv7dbL7A85bBO4JhX3pmmPN3n3OOc2+ic29jW1jabKubU8FiEppr89vyrAn6Wt9RwQOEvIlmUyWyfNjNr8rargY8ArwOPAFu93bYCD3vbjwC3mFnQzFaROLH7vDc0NGJmm71ZPremHLMgDI1FaMnzsA/A6vZ6Xn9b0z1FJHsyOXu5FNjuzdjxAQ855x41s2eBh8zss8AR4GYA59xuM3sI2ANEgdudc8mpKrcB9wHVwE+9x4IwHokxMRmnKc/DPgCXLm/k3/b2cWpsksYCfL6IlJ4Zw9859ypwWZryQeDDUxxzF3BXmvJuYLrzBUVraCwCQEueh30ANqxIXELx0tEhPnhB+wx7i4jMTFf4ZigZ/vke8we4ZHkTPoOn9g3wPx7dQ9/pibzXQURKS34nrS9gQ6HEjVzyPdsHEstJXLCkgft+dRiA4fFJ/urmS/JeDxEpHer5Z+jMsE8BTvgCbFiRuKl7a12QH73Yq4u+RGReFP4ZKuSwD8BNGzr46JrF/PC291Ph8/HA80cKUg8RKQ0a9slQctinELN9AC5f2cI9t7YAsHpxHfveHilIPUSkNKjnn6GhsQj1VRV5XdFzKue112m5BxGZl8In2QIxNBahuUBDPmc7t62Ot4bHGY9opU8RmRuFf4aGxvK/rs9Ukou9HdA6/yIyRwr/DBViRc+pnNum8BeR+VH4Z+jESLggV/em09Vag8/QYm8iMmea7ZOBU2OTHDs1wXmL6wpdFQCCFX5WtNTw2O4+wtE4H1+/jHWdjYWulogsIOr5Z2D38VMAXLyseAJ2fWcT+/pGuPfpQ3ziW0/z4pGhQldJRBYQhX8G9hxLLKd88bKGAtfkHd+4eT0v/cU1PHPHh3AOXjh0kreGx3lzUFf+isjMNOyTgd3HTrOkoYrWumChq3JGsMJPsMIPwOKGIPv6RnjqoVfoG5ng51/4YGErJyJFT+GfgdfeOlVUvf6znb+4nj3HTnPoRIhwNM7BgVHOaSuO8xMiUpw07DOD8UiMAwOjRR3+Fyyu5/W3RwhH4wD8/PX+GY4QkXKn8J/BW8NjxB2c2168Penzl9Sf2V7cEGTHXoW/iExP4T+DwdHEap5tRTTef7YLFifCv6Opmps2dPLC4ZOMTEwWuFYiUswU/jMYDHnr+NcVxwVe6az2rj+4fGUzv35+G9G449kDgwWulYgUM4X/DAZHwwAsqi3enn9NZQVf/sTFbLv6HDasaKam0s8v958odLVEpIhpts8MToxGMCvM7RtnY+uvdZ3Z3nzOIp7uUfiLyNTU85/BYChMc00lFUWwjn+mrlrdyqETIY6eHCt0VUSkSC2cRCuQwdEIi4pkNc9MXbW6DUBDPyIyJYX/DAZDkYLdtH2uzm2rZVljFb/cPwBAPO444Z27EBEBhf+MBkfDRbWsQybMjKtWt/FMzwmisTh/+dg+PviNp5iY1J2/RCRB4T+DwVCERUU8zXMqV53fyumJKI/v6eO7zxxiNBzVOQAROWPG8Dez5Wb2pJntNbPdZvZ5r7zFzJ4ws/3ec3PKMXeaWY+Z7TOza1PKLzezXd5r3zQzy02zsmMyFmd4bLKop3lO5cpzWzGDzz/4EhFv2YfDgwp/EUnIpOcfBb7gnLsI2AzcbmZrgDuAHc651cAO72e8124BLga2AN82M7/3XncD24DV3mNLFtuSdUPeBV4LseffXFvJ3/yHS/ntyzv58+svBODwCS33LCIJM4a/c+64c+5Fb3sE2At0ADcA273dtgM3ets3AA8658LOuUNAD7DJzJYCDc65Z51zDrg/5ZiidMJb2qF1AYY/wA2XdvDVm9az7epzaaoJcFhr/YuIZ1Zj/mbWBVwGPAcsds4dh8Q/EEC7t1sHcDTlsF6vrMPbPrs83edsM7NuM+seGBiYTRWz6mRyaYcFOOxztpWLanlTwz4i4sk4/M2sDvgh8CfOudPT7ZqmzE1T/t5C5+5xzm10zm1sa2vLtIpZNxhKTI9caFM90+laVKOev4ickVH4m1mARPB/3zn3I6+4zxvKwXtOriPcCyxPObwTOOaVd6YpL1qhcGJqZF1w4a+CsXJRLceGxwlHNd1TRDKb7WPAvcBe59xfp7z0CLDV294KPJxSfouZBc1sFYkTu897Q0MjZrbZe89bU44pSsmgrAos/BmxXYtqiDvoHRonHnckTruISLnKpEt7JfAZYJeZveyV/TnwNeAhM/sscAS4GcA5t9vMHgL2kJgpdLtzLtndvA24D6gGfuo9itbEZGKKZPJeuQtZV2stAAcHQvz9z3uYjMX5+9/dUOBaiUihzBj+zrmnST9eD/DhKY65C7grTXk3sHY2FSykZM8/WLHwe/7nL67HDPYeP80v9w8syGsXRCR7Fv5gdg5NTMap9Pvw+Yr6WrSM1AUr6FpUy1P7+jkxGqHCt/D/QRORuVMCTCMcjREsgfH+pIuW1vPikWEATus2jyJlrXSSLQcmJuMlMd6ftGZpw5ntsUiMyVi8gLURkUJS+E8jHI2VxEyfpItSwh/g9Lh6/yLlqnSSLQfCk3GqAiXU81+WCP+AP3EO4/REtJDVEZECUvhPIxyNlcRMn6QlDVVct3YJv7Uhca3dKfX8RcpW6SRbDkyUWM/fzLj705fzW5cnwl/DPiLlS+E/jVLr+Sc1VgcAzfgRKWell2xZVGo9/6SGqkT4a9hHpHwp/KdR8j3/cZ3wFSlXpZdsWVSqPf+qgI+A3zTsI1LGFP7TKNWev5nRWB3QsI9IGSu9ZMuiUu35Q2LcX7N9RMqXwn8apdrzB2hQz1+krJVmsmWBcy6xtk+p9vyrA7rCV6SMKfynEIklb+RSmn9EjdUBRtTzFylbpZlsWZC8i1fpjvlXaNhHpIwp/KdQSnfxSic520f38hUpT6WZbFkQLvGe/8pFNUTjjtffHil0VUSkABT+Uyj1nv+HLlyMGTy+u6/QVRGRAijNZMuCUh/zb6sPcvmKZh7b/XahqyIiBaDwn8LEZGn3/AGuvXgJe46f5ujJsUJXRUTyrHSTbZ7C0dLu+QNct24JPoPvP3ek0FURkTxT+E+hHHr+nc01bFm7hB889yajYV3wJVJOSjfZ5qkcev4Af3jVOZyeiPLP3UcLXRURySOF/xTKoecPsGFFM5csb+IHzx3RnH+RMjJjspnZd82s38xeSylrMbMnzGy/99yc8tqdZtZjZvvM7NqU8svNbJf32jfNzLLfnOwpl54/wO9uWs7+/lF2vjlU6KqISJ5k0q29D9hyVtkdwA7n3Gpgh/czZrYGuAW42Dvm22aWTM+7gW3Aau9x9nsWlWTPvypQ2j1/gI+vX0ZdsIIHntfQj0i5mDHZnHO/AE6eVXwDsN3b3g7cmFL+oHMu7Jw7BPQAm8xsKdDgnHvWJcYW7k85pigle/7BitLv+dcGK/jIRe38Yv+Ahn5EysRcu7WLnXPHAbzndq+8A0jtPvZ6ZR3e9tnlaZnZNjPrNrPugYGBOVZxfsplzD/pilUtDIyEOaI5/yJlIdvJlm4c301TnpZz7h7n3Ebn3Ma2trasVW42wtE4lX4fPl9Rn5rImiu6WgB44bDG/UXKwVzDv88bysF77vfKe4HlKft1Ase88s405UVrYjJGsAzG+5POa6ujsTpA9+GzR/hEpBTNNd0eAbZ621uBh1PKbzGzoJmtInFi93lvaGjEzDZ7s3xuTTmmKIWj8bIY70/y+YyNK5t5QeEvUhYymer5APAscIGZ9ZrZZ4GvAdeY2X7gGu9nnHO7gYeAPcDPgNudczHvrW4DvkPiJPAB4KdZbktWjUdiVFeWT88fYPM5izgwEOLAwGihqyIiOVYx0w7OuU9N8dKHp9j/LuCuNOXdwNpZ1a6ARsNRaitn/OMpKTdctoyv/+x1Hnz+CF/82JpCV0dEcqi8urazEApHqQuWV/i311dxzZrF/MvO3jP3MxCR0qTwn0IoHKWuqrzCH+CWTSsYGpvkydf7Z95ZRBYshf8URsJRasus5w/wa+cuoqkmwGO6w5dISVP4TyEUjlJXZmP+AAG/j2suWsy/7e0j4l3lLCKlR+E/hVA4VpY9f4Ata5cwMhHl2YODha6KiOSIwj+NeNwxWqZj/gBXntdKfbCCH7/YO/POIrIgKfzTGPPW9akLls9FXqmqAn5u2tDBT3a9zeBouNDVEZEcUPinEfJuaViuwz4An968kkgszj/pDl8iJUnhn0byfrblNs8/1erF9XzgvFb+91MHOKqVPkVKjsI/jdEJr+dfhrN9Un3lk+twDv7ogZeIx7XOv0gpUfinkRz2KdcTvkkrFtXwF7+5hpePDvP/3ijMfRVEJDcU/mlo2Ocdn7ysgyUNVfzDLw8WuioikkUK/zRGdcL3jIDfx+9d2cWvDgzy5D4t+SBSKkoy/J1zvP72aV5769Scjn9ntk95TvU822c2r+SipQ38x++9yKu9w4WujohkQUmGv5mx7f6d/K8n3pjT8aPhxDz/+mAgm9VasGqDFWz/gytorgnwn/7p5TP3NxaRhaskwx/g189v41cHBue0NHEoHMVnUFVGt3GcSXt9FV+5aR0HBkJ868meQldHROapZNPt189vY3wyxs453JB81FvRM3HHSUn64AXt3LShg7ufOsDe46cLXR0RmYeSDf/3n7uIgN/mNEVxtAxv5JKpv/jYGhqrA3zhoVcYCkUKXR0RmaOSDf/aYAUbV7bMKfzL8S5emWqureQbN6+nZ2CUT3zrafpPTxS6SiIyByUb/gDvO6eFfX0jZ6ZuZmq0TG/kkqkPXbiYB7dtpu9UmL98bF+hqyMic1DS4b+uoxHnmPX4tIZ9ZrZhRTO//4Eu/mVnL7/qOVHo6ojILJV0+K/taASY9Xz/UDiqOf4Z+NxvnMfylmo+fe9zfP1nrxMrsvV/nHM8+uoxRiYmC10VkaJT0uHfXh+ktS7IrlmE/9unJjg8OEZHU00Oa1Ya6qsC/OSPr+Lmy5dz91MHuO17O4vqH4A9x0/zuR+8xD+9oGWpRc5W0uFvZqzraGD3W5kP+9z9VA/xuOP3r+zKXcVKSH1VgK//9nq+eP1FPL6nj3t+UTxrAD3jDUfN9UpvkVJW0uEPiaGf/f0jjEdmvthr55tDPPD8UW7e2MnyFvX8Z+MPr1rF9euW8FeP7+M3/+5pfvba8UJXiad7Evcg3qNrEkTeo+TDf2NXC3EHP5zhfrRP7Onj9777PMuaqvjTay7IU+1Kh5nx1ZvW8wdXdhGJxrnt+y/ypUd286sDJ4hE43mvTzga44VDJ6nwGQcGQlqSQuQseZ/SYmZbgL8F/MB3nHNfy+XnXb26lfetauEbj+3jwxe1s7Sx+sxr4WiMv9vRw892v01P/ygXLK7n//z+FbTVB3NZpZLVWB3gix9bwxc+GuPPf7SL7/37m9z3q8PUBSv42LqlXLi0niu6Ws6ciM+lFw4NMT4Z46YNHfzoxbd4o2+E9Z1NOf9ckYXCnMvfCToz8wNvANcAvcALwKecc3umOmbjxo2uu7t7Xp/7Rt8IH/+7pzHgshVNLGmoYnlLDU/s6eP1t0e4+vw2PnJRO5/atIKAv+T/M5Q3IxOTPHtgkMf39PGTXccZ84befuOCNlrrgtQGK1jSWMXaZY1cuqKJSr8Pv8/wWeJ/EsNjEXr6R6ms8DE0Nsmi2krWLG3A50u/7IZzjkgsjnNw47eeYTAU4f4/2MR1f/tLvnrTOj61aUXW2uacY2IyzmQ8Tl1lxZR1EikUM9vpnNs45et5Dv/3A19yzl3r/XwngHPuq1Mdk43wBzg4MMp3nj7E/r4Rjpwco+90mAuX1PMnHzmfLWuXzPv9ZXrRWJyToQj3PnOIJ/b0MR6JMRqOMjKR/gI8v8/SzhyqC1bQWldJzDki0TjRmCPmHNGYYywSJe7AZxB38N3f28gHz2/nki8/ngjpYAV1wQrGJ2P4zQgG/PgMnIO4S7zPyESU8GScqoCPsUiMgN9HVcBPVcBHwO9jLBJlLBwj5H1Wsq7BCh/BCh+VyYffd2ZtqOTfsXe1xr13M/Xv4jtlqfu988Nk1DE8HsFvduYzgxV+An7DpzWpSsajf/wBghVzm3Y+U/jne9inA0idd9cLvO/sncxsG7ANYMWK7PTWzmmr4yufXAck/pKFo3GqAprLn28ESRAAAASzSURBVC8Vfh/tDVXced1F3HndRWfKT41PsvPNk7zRN0os7ojFHdG4Ix531AYruHBJPbG4o7EmwJHBMXa9dYoTo2EC/kTAVviNCp/h9/moqUyEdCgSY1lTNR+6cDEA//XjF/Hy0VOYwchElOqAj7iDSDROLO7wef/b8JlRF6wgWOEjHI1TXeknGnOMT8YIT8aIxOLUVPqpDVZQW1lBbbCCCp8xPB5hYjJOJOo9YvH3nuewdz0ltlNC2s6UveeQd+2bLKvwG001lcTi7sznhqMxJmPuXf9IyMJm5O4f8nz3/G8GrnXO/aH382eATc65P5rqmGz1/EVEyslMPf98D3D3AstTfu4EjuW5DiIiZS/f4f8CsNrMVplZJXAL8Eie6yAiUvbyOubvnIua2eeAx0hM9fyuc253PusgIiIFmOfvnPsJ8JN8f66IiLxDk9pFRMqQwl9EpAwp/EVEypDCX0SkDOX1Iq+5MLMB4M05Ht4KlOM9Bsu13VC+bVe7y89MbV/pnGub6sWiD//5MLPu6a5wK1Xl2m4o37ar3eVnvm3XsI+ISBlS+IuIlKFSD/97Cl2BAinXdkP5tl3tLj/zantJj/mLiEh6pd7zFxGRNBT+IiJlqCTD38y2mNk+M+sxszsKXZ9cM7PDZrbLzF42s26vrMXMnjCz/d5zc6HrOV9m9l0z6zez11LKpmynmd3p/Q7sM7NrC1Pr7Jii7V8ys7e87/1lM7s+5bWSaLuZLTezJ81sr5ntNrPPe+Ul/b1P0+7sfefOuZJ6kFgq+gBwDlAJvAKsKXS9ctzmw0DrWWV/Cdzhbd8BfL3Q9cxCO68GNgCvzdROYI333QeBVd7vhL/Qbchy278E/Oc0+5ZM24GlwAZvux54w2tfSX/v07Q7a995Kfb8NwE9zrmDzrkI8CBwQ4HrVAg3ANu97e3AjQWsS1Y4534BnDyreKp23gA86JwLO+cOAT0kfjcWpCnaPpWSabtz7rhz7kVvewTYS+Je4CX9vU/T7qnMut2lGP7pbhI/3R9aKXDA42a208y2eWWLnXPHIfGLBLQXrHa5NVU7y+X34HNm9qo3LJQc+ijJtptZF3AZ8Bxl9L2f1W7I0ndeiuGf7nb3pT6f9Urn3AbgOuB2M7u60BUqAuXwe3A3cC5wKXAc+J9eecm13czqgB8Cf+KcOz3drmnKFmzb07Q7a995KYZ/2d0k3jl3zHvuB35M4r97fWa2FMB77i9cDXNqqnaW/O+Bc67PORdzzsWBf+Cd/+aXVNvNLEAiAL/vnPuRV1zy33u6dmfzOy/F8C+rm8SbWa2Z1Se3gY8Cr5Fo81Zvt63Aw4WpYc5N1c5HgFvMLGhmq4DVwPMFqF/OJMPP80kS3zuUUNvNzIB7gb3Oub9Oeamkv/ep2p3V77zQZ7VzdKb8ehJnxw8AXyx0fXLc1nNInOV/BdidbC+wCNgB7PeeWwpd1yy09QES/9WdJNHT+ex07QS+6P0O7AOuK3T9c9D2fwR2Aa96f/mXllrbgQ+QGL54FXjZe1xf6t/7NO3O2neu5R1ERMpQKQ77iIjIDBT+IiJlSOEvIlKGFP4iImVI4S8iUoYU/iIiZUjhLyJShv4/sisgwzioiNEAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(\n",
    "    age_value_counts_sort_by_age.index,\n",
    "    age_value_counts_sort_by_age\n",
    ")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "def divide_age(age):\n",
    "    \"\"\"\n",
    "    :return:\n",
    "        age = \n",
    "        Nan,0-6,>100 -->0  年龄编写有误\n",
    "        7-12         -->1  少儿\n",
    "        13-17        -->2  青少年\n",
    "        18-45        -->3  青年\n",
    "        46-69        -->4  中年\n",
    "        70-100       -->5  老年\n",
    "    \"\"\"\n",
    "    if np.isnan(age) or (age <= 6) or (age > 100):\n",
    "        return 0\n",
    "    if age >= 7 and age <= 12:\n",
    "        return 1\n",
    "    if age >= 13 and age <= 17:\n",
    "        return 2\n",
    "    if age >= 18 and age <= 45:\n",
    "        return 3\n",
    "    if age >= 46 and age <= 69:\n",
    "        return 4\n",
    "    if age >= 70 and age <= 100:\n",
    "        return 5\n",
    "\n",
    "df_user['age'] = df_user['age'].apply(divide_age)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>location</th>\n",
       "      <th>age</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>usa</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>usa</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>russia</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>portugal</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>united kingdom</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   user_id        location  age\n",
       "0        1             usa    0\n",
       "1        2             usa    3\n",
       "2        3          russia    0\n",
       "3        4        portugal    2\n",
       "4        5  united kingdom    0"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_user.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 分析年龄段"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAATEAAADnCAYAAAB2dWHuAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO3deXxU9b3/8ddnErKAbMqOwOCakUV2BEEw11o11da2btel9rZqbdRar7bptVet1Tattr21WtNfvV6t+1Jxi9W6Iyr7qsyIIpOCIIvsELLN5/fHOUjEhMwkM3PmzHyej8c8Mp45c84nmLzzPWe+i6gqxhjjVwGvCzDGmI6wEDPG+JqFmDHG1yzEjDG+ZiFmjPE1CzFjjK9ZiBljfM1CzBjjaxZixhhfsxAzxviahZgxxtcsxIwxvmYhZozxNQsxY4yvWYgZY3zNQswY42sWYsYYX7MQM8b4moWYMcbXLMSMSZCIvCEi49rYZ6qIvC8ii0VkoIg8maRzTxeR55NxrGxhIWZMapwP3K6qo1T1E1X9ttcFZSsLMZNzRCQoIu81++9rReQmt4X1GxGZKyIrRGSq+3qxiDwqIktF5DGguNl7TxaRd0VkoYg8ISIHicj3gbOBG0TkoebnE5GLReQpEXlRRD4Ukd8e6Fju9lNEJCIis4BvpudfyT8sxIz5onxVnQBcDdzobrsc2K2qI4FbgbEAItIL+DlwkqqOAeYD16jqPcCzwHWqen4L5xgFnAOMAM4RkUGtHUtEioC/AqcDU4F+qfim/Szf6wKMyTBPuV8XAEH3+QnAHQCqulRElrrbjwOOAd4WEYAC4N04zvGqqm4DEJHlwBCgRyvHKgFWqeqH7v4PApe2/9vLPhZiJhc18sWrkKJmz+vcr0188fejpVWmBXhZVc9L8Px1zZ7vPU+LxxKRUa2c27jsctLkovVAHxE5REQKga+1sf9MnBv1iMhwYKS7fTZwvIgc4b7WWUSOamdNrR0rAgwVkcPd/RINzKxnIWZyjqo2ADcDc4DncYLiQO4GDnIvI38CzHWPsxG4GHjEfW02zuVfe2pq8Viqugfn8rHavbFf057jZzNRtZaqSY5gRXV3nF/iAUCfFh4H41w6BZo9xP3aCGwBPgM27/dYA3wAfBStLGt+KWaMhZhJXLCi+iDgWJwb0cPcr8cAA1N86hhOS+SDZo/5wKJoZVljis9tMpSFmGlTsKK6GzAFmO4+xgB5Hpa0v104l3iz3Me70cqyHd6WZNLFQsx8SbCiOg+nT9JpwInAaDIrtNrSBCwBqnH6ay2IVpbZD3qWshAzwOfBdRJwFnAG0NvbipJqLTADeByYFa0si3lcj0kiC7EcF6yonghciBNefTwuJx3WAQ8Df4lWln3odTGm4yzEclCworoQOBe4EncITQ5S4DWc7hPP2AcD/mUhlkOCFdWDcMYBfp/sulzsqHXAPcD/i1aWrfG6GJMYC7EcEKyoHgHcAJyJv27Qp1sDcC9wa7SybLXXxZj4WIhlsWBF9ZE4PdPPwelUauJTD/wv8CtrmWU+C7Es5F423oAzjMUG+bdfHc5l5q+jlWWfeF2MaZmFWBYJVlT3wJkD63Kg0ONyskktzjxit0Ury+q9LsZ8kYVYlghWVJ8D/A82aV4qrQCuiFaWvex1IWYfCzGfC1ZUB4E/A6d6XEoueRy4xi4xM4OFmE8FK6rzgWtwLh87e1xOLtoJXA/8yYY0ectCzIeCFdVHA4/gjGk03noJ+E60smy914XkKpsU0WeCFdUX4Ew/YwGWGb4KLA1WVJ/mdSG5ylpiPhGsqO4M3IXTbcJkHgX+BPzEJm5MLwsxHwhWVA/HuZkc8roW06alwDejlWUrvS4kV9jlZIYLVlSfizPhnwWYP4wE5gQrqqd6XUiusBDLYMGK6p/hTBtT3Na+JqMcArwSrKj+jteF5AK7nMxA7gSFf8YWSc0Gvwaut24YqWMhlmHcRTgexzqvZpMngYuilWW1XheSjSzEMkiworof8ALWfSIbvQmURSvLdnldSLaxEMsQwYrqvjg/6Ed7XYtJmZnAaRZkyWU39jNAsKK6N85UyRZg2e0E4B/uLQOTJBZiHgtWVB8CvIKz+KzJflOBF4MV1V29LiRbWIh5KFhR3RN4Gadvkckdx+MEmbXIkiArQ0xEoiLSy+s6DsT9S/xP7CZ+rpoMPO52pzEdkJUhlk4ikvAPYbCiOgA8CoxLfkXGR07FGW9pOsD3ISYiXUSkWkSWiMh7InKO+9KVIrJQRJaJSIm77wQReUdEFrlfj3a3F4nI/7n7LhKRE93teSJym4jME5GlInKZu326iLwuIg8Dy9pR9u2AzXpgAC4PVlRf43URfub7EANOAdaq6rGqOhx40d2+SVXH4CyOeq27LQKcoKqjcRbS+JW7vRxAVUcA5wH3i0gR8D1gm6qOB8YDl4jIUPc9E4DrVTWhG/LBiurvAz9ux/dpstdtwYrqM70uwq+yIcSWASeJyG9EZKqqbnO3P+V+XQAE3efdgSdE5D3gD8Awd/sU4AEAVY0ANcBRwMnARSKyGJiDMybuSPc9c1V1VSKFBiuqp+EMJzKmuQDwYLCierzXhfiR70NMVVcAY3HC7NcicoP70t45nZrYt2zZL4HX3Rbb6UCRu721NRkFuFJVR7mPoar6T/e1hDosBiuqDwf+DnRK5H0mZ3QGZrh9Bk0CfB9iIjIA2K2qD+LcaxpzgN27A3sXd7i42faZwPnu8Y4CBgMf4Ew9fLmIdNr7moh0SbTGYEV1IU6AHZLoe01OGQg8EKyotoWOE+D7EANGAHPdS77rgVsOsO9vcVprbwPNP1X8M5AnIsuAx4CLVXXvwqnLgYXuJehfaN9itLcBx7bjfSb3fBX4mddF+ImNnUyx035216nLNfiC13UYX2kEpkQry+Z4XYgfWIil0LR7j+n1zOp178xvPPaTHzT8+PhG8u1+mInXSmBUtLJsp9eFZLpsuJzMWJvz8qqmDxnYRbtGui0uvPTDo2R1Qp9mmpx2OM6K7qYN7Q4xEblZRE5KZjHpGC4kIi+ISI9UngNgxP0jzga+1SQy4Jo+vUZf2b/bxqcLK7pel//YW6k+t8ka33O75ZgDyKjLSRGJAuNUdZPXtXTEiPtH9AbeB77wcXlBTFf+Zf2Gur67u+74ev0vj9hMd/u00rQlDBwbrSxr8LqQTBVXS0xErheRD0TkFRF5RESuFZH7ROTb7utREflFC8N8eovIy+72v4hIjYj0OsBQIUjOcKGLReQpEXlRRD4Ukd82+14+b+2JyNMiskBE3heRS5vts1NEbnXrmy0ifRP8d72T/QIMoD4gh3+3X5+j7uirte8Wlu/5WuDdBQke1+SeEPtGnJgWtBliIjIWOBdntoVv4gy/aUlLw3xuBF5zt8/A6X8FrQ8Vau04iQ4XAhgFnIPTBeMcERnUQs3/oapjcQZiXyUie1tGXYDZqnosTh+yS1r9B9rPiPtHfAU4u9UdRPJfPKjL9GnBAVt/1Lmq5yOdbplZQIMttmoO5L+DFdVD294tN8XTEpsKzFDV3aq6HXi2lf1aGuYzBWe2BlT1RWCLu721oUKtHSfR4UIAr6rqNlXdg9PXa0gLNV8lIkuA2cAg9g0pqgeeb6GOAxpx/4gATp+wNu0KBIZ989B+/Wb1XsviwktqRsjHH8bzPpOTinFa96YF8d7Yj+fGWUvDfFrseXyAoUKtHSfR4ULNj7P/sZw3ikwHTgImuS2uRc2O26D7bhZ+6b0HcCGJdGoV6fy37t1OKBvce8fdnW8suCn/vpmQQTcpTSY5LVhRfYbXRWSieEJsJnCmiBSLSFecEInXLNxLKxE5GejpPk9kqBAkPlwoHt2BLaq62733dlyc72vRiPtHFHHg0QKt2pSfN/a0QQO6y8Hv5s8tLF/Ql80bOlKLyVq32JCkL2szxFR1Ic5QnMU44/8S6SLwC+BkEVmIMwHcOmAHiQ0VgsSHC8XjRSBfRJbitPRmx/m+1vwIOLS9b1aRHrcf0nPy9w4tbqguvnrX2Xmvz+1gPSb7jADO8rqITJNwFwsRuQnYqaq3x7FvIdCkqo0iMgm4W1VHtavSDDbi/hFdgShwcDKOF1D99NcbP1szYEf/2vPqfz62lsLOyTiuyQphYHi0sizmdSGZItU99gcD89yb53eQwKd8PnMVSQowgJhIv5/26TXudwN36ttFl9WMl0g4Wcc2vhcC/t3rIjJJRnV29aNkt8L210l11Z3rNm5fu3vClusaLj1BCdhQMfMREIpWljV6XUgmsF+IjruSFAUYQIPI0Mv69x4+q/9yebfw8kWHysa1qTqX8Y0jcD/QMtYS65AR948oBlaTpskOO8di4b+u3VT/9O6zdt3bdOrkdJzTZKyF0cqysV4XkQmsJdYx55DG2Vp3BwKh8wf2Pjqv3/MNLxT8dFYXanek69wm44wJVlRP9LqITGAh1jGXtr1LkokUPdqt67QfBGNdnupyxUdTA0vbs2ScyQ7lXheQCexysp1G3D9iOO1bczJ5VLddsWXb0kGbS5qubLhyShN57Zk62/hXHXBotLLM17O+dJS1xNrvMq8LQKT7nQf3mPqnIauLXuh8xfzDZG2N1yWZtCrEWRs1p1lLrB3CJaGiF8fKjMenBCbu7Cw9va4HIKC64eebtq5YveVk7mj61hSv6zFpEwUOz+XOrxZi7RAuCZ0FPK5Qv74HC56cEsifNUzGxAKS1+abU2xYXd1bP12brxfvuXHkNg5K+Qy2JiOcEK0sy9kZgy3E2iFcEnoG+MKMAjFh/ZKhEnl4euDQmr5yuEelAZCvWvOr9dtWz9j2vS7/jI0f7WUtJi3+GK0su9rrIrxiIZagcEnoEJyB7K2uXLS7gPdfHiOfPX1c4NhdxdI9fdU1oxqbWrvnzdPXDdSr6q+Z0kB+gSd1mHRYDQyJVpbl5C+zhViCwiWhC4G/xbOvwp61B7PwiamBwndDMlpF0v5BSlEs9kHlutpPb9tx3aCIDj4s3ec3aXNcrq5TaSGWoHBJ6GGcqbAT0iSsW3S4fPDw9MCQNb0lvVMNq9adsaN21qHrJ+b/pvF8Wz0nO90erSy7zusivGAhloBwSSgAbKCDvfR3FbLspbGy9ZmJgWNri6RbcqprW/empiU3fBLY9F+7fjZyEz2+tJCJ8bVV0cqynGxpW4glIFwSmkjHJ0/8nMLuNb1Y/PjUQNGco2U0IqmftVN1xwVba+d8uuGs7jNiU1tb9MX408hoZVnOjeCwzq6JOTWZBxPoPGgTk/9zRmzMI79pWvuff296c8BnmtoOqyJdH+zZ+aT3D3smdlvxb14uoq42pecz6TTd6wK8YC2xBIRLQnOACak8h4LuLGLZP8YFtj8/UUbtKZCDUnUuUd106aaGha989sMhi/WIo1N1HpM2T0Yry3Ju+moLsTi5XSs2kMbWq8Kuf/Vh0WNTA13nHykjU3W5eURdw8wT14xs/H39RSdCGi5pTaqsj1aW9fO6iHSzEItTuCRUxr61KNOuMcC/5h4lqx6ZFjh8/cHS7gVJWpOnuuYH6/Pf+9uWHx+7ll79k318kzYl0cqyeFf8ygo260H82lpWLqXyYwyeHNHBkyJNuqOYxdUTAruqx8vo+k6SlEVEmkQOvatv44BR3StfP27Nqaueavw3m3TRn04g/mULs4K1xOIULgnNAL7hdR3NKexY1Zclj04LdFt8eGBkso5bGIt9eP663h/ds/2KqbsoTtk9OZMSD0Yryy70uoh0shCLU7gkVIOzelNGagxQ825IVj16QuCojT1kQIcPqFo/eae8vuWTCwfO1WHDk1CiSY9wtLLsGK+LSCcLsTi4N/V9MfGcQmxbFxY9NyFQ99JYGV3fSYo7cryDmmLLTl5zzLoHdl/0bzECns/SYdrUAHTOpZWQLMTiEC4JnQy85HUdiVLYtrI/Sx+ZFui5bGig/a0p1Z3TthW9uezTy4+t0X5J/1DBJF1O3dy3zq7x8eV0NgLdj1jH1P9+NDb8od82fvzD55vePGS7fpr4geSgN3vUlXHEHz45peClmSko1SRXyOsC0slCLD5HeV1AR3Vq4rDpy3Tan+9q6l31p8b5p82NvZvfqHWJHGNzvkx857DXhpX1vv35ruzalqpaTYflVIjZ5WQcwiWhl4CTva4j2RS2rhjI0kem5fVaPkQSuhnctz4ws0v03G5LmkaOSlV9pt0eiFaWXeR1EeliIRaHcEloOVn+160+n49mDpNPHj8hcMzWgySuGS4CqmvHfBpa/NbWC77SSH6rk0SatJsXrSxL6fC4TGIhFodwSWg70NXrOtJBofGzrix8elIg9tooGdOYJweeEVZVB+4pfmXnvy45Yk1sYHrnSTOt+SRaWZYzH8BYiLUhXBLqDmz1ug4vxGBzZBDvPTw9r8+KQ6XkQPvmx1g59JPpNQt3nlKarvpMq+qilWVFXheRLhZibQiXhIYB73ldh9fq8vng9ZHy6d+nBIZt6yK9WtxJtWHAzt6vrltz6fjtdOvQxJGmw7pFK8t2eF1EOliItSFcEjoF+IfXdWQKhYaN3Vn01OSAvjFSxsYC8qXxtwWxwHsH1ZxVW7NntE266J3Do5VlH3tdRDpYiLUhXBL6d+Ahr+vIRDFh4/uDZfnDJwYGrOwvR37hRdXdvbYeNXPNpxed2ECnQo9KzGUTo5Vlc70uIh0sxNoQLgl9F7jX6zoy3Z5OhF89VjY+dXxg+I7OcvDe7QWNBfObVl3SbWvjIN/3tfOZsmhl2QteF5EONhVP26wVEYeiBkJl8zV02vym+vU9mP334wN5bw2XMfX59eM44q6tfTYe/9qGz75mky6mT8v3LbOQhVjbcuZTnmQQKOi3lePKq2Nc/gIblgYl/PD0wKHRfm+X9uzx3qxdqy4/sj7Wo6/XdeaAnFks2UKsbdYSa6eA0mfUKu0zalUTuwtY/srozbGnj6vcvm3Lt6K7t4+f6HV9WS6u320R2amqSZ0zTkRuBmaq6ivJPG5rLMTaZiGWBJ3rOeaMOcrpcxrr1h382MZnQ4uff7b3d0qVgqTMTGu+xLNpk1T1hnSez0KsbRZiSSRQOGAzk3/w9gec0/XupfNHX10MDaJaX6daV+8+GtC6JtW6JrQuplqnqnWg9eI+8tDGPGjshDZ2gqYCNFYAsSJBi0Fz/ue6QfKboCzu/UXkIOAZoCfQCfi5qj7jvnYN8B/urveo6v+ISBCn69EsYDLwCfB1Va0VkfuA51X1SRG5ATgdKAbeAS5TVRWRN4A5wIlAD+B7qvpWe77XnP+fHQe7EZ0iPXesHjl8xRNzw0dfMJaAJK3loNpUj9bvRhtqlbo9aP0ejdU1oHX1qnv2BmTMDUjQelGtF2gIoA35qo350NQJbSqAWJHz0GKgMz6511SgjYnOULMHOFNVt4tIL2C2iDyLs7bEd4GJOL8Lc0TkTWALcCRwnqpeIiKPA98CHtzvuHeq6s0AIvIA8DXgOfe1fFWdICKnATcCJyX8jWIhFo+c6PXslf6fzp6wu7j3WzVDTpmarGOK5BUgxQVQ3CPZf4FUY41o/S5oqFWt34PW1anW1aF1DZ+3IGN79gakovWo1gfcgMxzArJxb0AW7heQyfwQqT7B/QX4lYicAMSAgUBfYAowQ1V3AYjIU8BU4Flglaoudt+/AAi2cNwTReQnON/fwcD77Auxp9p4b1wsxNq23esCst3hq56buru475sb+4ye5nUtbREJ5CNF3aGoewoCsgkanBak1tc6AVnfLCD3NDZrQe4NSPfyuiGg2vB5C1ICRYn+3J4P9AbGqmqDiERxQvVA32bz+eiacC4ZPyciRcCfgXGqulpEbuKLQV3X7L3tziILsbZZiKXBiOX3TJtX/NO3dnQdnLQWmd+IBPKgsCtS2DUJAbknwf27AxvcADsRGOJunwncJyKVOIF2JhDvakp7A2uTe8/t28CTCdbVJpvZtW0WYmkyduFtkwrrts7zuo4skejMKw8B40RkPk6rLAKgqguB+4C5ODfi71HVRfEcUFW3An8FlgFPAyn5f2vDjtoQLgmdCLzmdR25oilQsGvW5F/XNOUX5dSyYykwqryqdInXRaSDtcTaZi2xNMqL1XeZNOemPhJr/JfXtfhczqyBYCHWts+8LiDXFDTs6DVh3q8UjW30uhafUmCD10Wki4VY29YAObMQaaboUrt+yOjFd2zE/WjfJGRteVXpbq+LSBcLsTaEIuFGoMbrOnJRz20fHhOK/G05qvZHJDEfel1AOlmIxWel1wXkqv7r544P1vzjXa/r8BkLMfMlH3ldQC47LFo9tc+GBW96XYeP5NTPq4VYfKwl5rHhy++d1nV7TbsGCOcga4mZL8mpv2yZatzC2yYX7tmSE/PGd5CFmPmSnPqhyFSC5h039+bheY2173tdSwZTcuzKwUIsPh9gnV4zQl6svvOkOb/oK7HGqNe1ZKg15VWltV4XkU4WYnEIRcIxnHFjJgMUNOzoNXHerQHrDNui2V4XkG4WYvF7x+sCzD6dazcMHrP4fzahutPrWjJMzn2KayEWP+urlGF6bFsZOiZ8X8Q6w37BG14XkG4WYvGbjXPT1GSQfhvmjxsarc65S6hWbAKWe11EulmIxSkUCW8jB39A/GBozT+m9F0/L+cuo1ows7yqNOf+0FqIJeZtrwswLRsWvm9at+2rZnpdh8fe8LoAL1iIJeZFrwswrRu78HfHF+7ZnMudYXOyNWohlpiX+eLiCCaDuJ1hR+Q11r7ndS0e+AxnGuicYyGWgFAkvJMcbbL7RV6soXjSnJv6S6xxlde1pNnLuXg/DCzE2uNprwswB1bQsPOQifNuyc+xzrAPeV2AVyzEEjcDZ3FRk8E6124cNGbRH3KlM+wmcvh+rYVYgkKR8Hpgltd1mLb12P5xaFj4/yKoNnhdS4o9Xl5VmrMdfi3E2ucxrwsw8em7YcG4odHns33c64NeF+AlC7H2eRjImYUY/G5ozYtT+n46N1u7H6wsryrN6SFxFmLtEIqEtwKPel2Hid+wyP3Tum37OBs7wz7sdQFesxBrv7u9LsAkZuyi308pqv0s2y4tc/pSEizE2i0UCc8HFnhdh4mfoIGJ8345Mr9hd7Z0Cp1dXlW6wusivGYh1jHWGvMZtzPsoRJryIbOsL/3uoBMYCHWMY8AW70uwiSmU+OunhPn3dIJjW3wupYO+Bh4yusiMoGFWAeEIuHdwD1e12ES17l206FjFv1+M6o7vK6lnf5QXlXa5HURmcBCrONuA3Z5XYRJXI/tq0qGLb93hQ87w24C7k30TSLi2egFETlDRCpScWwLsQ4KRcIbgDu9rsO0T9+NC8ce/vEzc1H10+Dp28urSn3VT1FVn1XVylQc20IsOW4D/HpZkvOGrH75+H7r5/ilM+xnwF1t7SQiPxCRxe5jlYi87m6/VUSWiMhsEenrbhsiIq+KyFL362B3++HufvNE5Oa9LTkRmS4ib4jIkyISEZGHRETc16Ii8gsRWSgiy0SkxN1+sYjc6T4/XUTmiMgiEXmlWR03ici97rE/FpGr4vkHsRBLglAk/Blwh9d1mPY7JvLA9O7bVvqhM+zvy6tK27wsVNUqVR0FjAfW4HyS2QWYrarHAjOBS9zd7wT+pqojcWbD2Puz/Efgj6o6Hli73ylGA1cDxwCHAcc3e22Tqo7B+fT+2hbKmwUcp6qjcTqN/6TZayXAV4EJwI0i0qmt79VCLHl+B2zzugjTfmMW/WFKUe2mTF505FPgTwm+54/Aa6r6HFAPPO9uXwAE3eeT2Nfz/wFgSrPtT7jP9x8ZMFdV16hqDFjc7Fiw71PTBftt3+tQ4CURWQZcBwxr9lq1qtap6iZgA9C3rW/QQixJQpHwFpwgMz7ldoYdld+we6nXtbTi2vKq0rhvW4jIxcAQ4Bfupgbdd++vCchv5a3x3B9sPsPx/seqa2X7Xn8C7lTVEcBlQFGcx22RhVhy3Y7Tf8f4VF6ssWjSnJsGSawh0/4/vlFeVRr3xIciMhbnUu4Ct7V0IO8A57rPz2ffVFOzgW+5z8/d/00d0B34xH3+nY4ezEIsiUKRcC1whdd1mI7p1Lir53FzbylAY+u9rsXVAJQn+J4rgIOB192b+wfqz3gV8F0RWQpcCPzI3X41cI2IzAX6k7zbJTcBT4jIWzjdRTpE/PXJsj+ES0KPA2d5XYfpmG1dgx8sGHNtf0S6eVzKbeVVpT9pe7fkEpHOQK2qqoicC5ynql9Pdx1tsZZYalwNbPe6CNMx3XdEjx7+/j0fedwZdg1ws0fnHgssdltoPwT+06M6DshaYikSLgldhfPJkPG5mkEnvb3ysG9Mxu0LlWZnl1eVPtH2brnLWmKpcycw3+siTMcNWf3K8f0/fdeLzrD/tABrm4VYioQi4RjOTVIbV5kFQh88NL3H1g/TGWQbgIvTeD7fshBLoVAkHME+rcwaoxf/cWpx7cZ0dIaNAReUV5WuS8O5fM9CLMVCkfB92BTCWUHQwIR5t4zKb9i1JMWn+nV5VenLKT5H1rAQS4/LgZyfRjgbuJ1hhwSaGlam6BRvAjem6NhZyUIsDUKR8E7gbL44pML4VKfG3T0mzru5GI19muRDbwDOs8kOE2MhliahSHgJ8GOv6zDJUbxn84BxC2/fjmqy+gPafbB2shBLo1AkfDfWdyxrdNtRc9Tw9/+6EtX6JBzuVrsP1j4WYul3DbbAQ9bos2nJ6CNWzpjfwZlh78Pug7WbhViauf3HLgByeun5bDJ4zauTB6x7u70TKj4LfL+8qtSGzrSThZgH3NkuzgA+9LoWkxwlKx6Z1mPLikQ7w84EzrEb+R1jIeaRUCS8CTgV2Oh1LSY5Ri+5Y2rx7g3xtrAXA2eUV5XuSWVNucBCzEOhSHglcDJJmFPJeM+ZGfbWMXF0hv0IOKW8qtSmM08CCzGPhSLhxcB0nPnTjc8FtLFw0pwbg4Gm+o9a2WUdcHJ5VWmmTLjoexZiGSAUCb8PTGPflL3Gxzo11nafOPeXXdDY/n2+VgOl5VWlq7yoK1tZiGWIUCS8AjgBqPG6FtNxxXWb+49beNtOVPdeMkaA48urSiNe1pWNbKGo08kAAAT9SURBVFLEDBMuCQ0CXgOO8LoW03EbDxm5eNnwS3YhgW+UV5Xavc8UsBDLQOGSUB+cDrHHt7WvyXjVwDmhSNjmlUsRu5zMQKFIeANQCvyv17WYDvkz8HULsNSylliGc+fq/x1xLCJqMkYDcF0oErZxsmlgIeYD4ZLQvwGP46wjaDJbDc7l4xyvC8kVdjnpA6FI+FVgArDM61rMAT0LjLYASy9riflIuCRUCPwGZ8VmL5YPMy1rACpCkfDvvS4kF1mI+VC4JHQyzvQt/T0uxUAUOC8UCadjARHTAruc9KFQJPxPYBjwgNe15LAmnA9chluAectaYj4XLgmdDlQBA7yuJYfMAy51x70aj1lLzOdCkfBzwFHALUCtx+Vkux3Aj4DjLMAyh7XE9iMiNwMzVfUVPxy3uXBJaDDOjf9zU3WOHKXAk8A1oUh4jdfFmC+yEMtC4ZLQZOAPON0yTMe8APx3KBJe6HUhpmU5HWIicj1wEc4UKRuBBcBw4HlVfVJEosD9wOlAJ+AsVY2ISG/gYeAQnPsjpwBjgYOAfwCzgMk4U+t8XVVrReS+Zse9wT1mMfAOcJmqqoi8AcwBTgR6AN9T1bfa872FS0KC0yL7L/d7Mol5A7g+FAm/43Uh5sBy9p6YiIzF+SUfDXwTGN/KrptUdQxwN3Ctu+1G4DV3+wxgcLP9jwTuUtVhwFbgWy0c805VHa+qw3GC7GvNXstX1QnA1XRgBZxQJKyhSPgRYKR7/HaFYQ6aA3wlFAmfaAHmD7k8Hm8qMENVdwOIyLOt7Ld3ebUFOGEHMAU4E0BVXxSRLc32X6Wqi5u9J9jCMU8UkZ8AnXGGEr0PPNfC+Vp6b0JCkbDizKRQHS4JTQJ+irNIiXWW3ace557XXRZc/pPLIQbODdu21Llfm9j373WgAKhr9rwJp6X1OREpwpndYJyqrhaRm4CiNs6XFKFI+F3gG+GSUAgox2mJHpLMc/jMapzuKfe4M4cYH8rZy0mc5bLOFJFiEemKc48qXrOAswFE5GSgZwLv3RtYm0TkIODbCbw3KUKRcDgUCV+B0+P/TOBpnNZILmjAuW/5DWBoKBL+lQWYv+VsS0xVF4rIYzhLZ9WQ2D2jXwCPiMg5wJs4iz/swLmx39Z5t4rIX3EGc0dxPhjwRCgSbsAJsKfDJaFDcFpmFwITvaopRfYALwF/B54LRcJbPa7HJFFOfzrZnHtZt1NVb49j30KgSVUbRWQScLeqjkp1jekSLgn1w1lK7mTgK0Afbytql+04La6/Ay/YxITZy0LMlWCIHYkzv1cA5zLsh6rqWYsqldyuGqOAr+KE2njiaHF64BPgbZxL/VnA0lAkbCtr5wALMZOQcEkogLOIySic7il7v/ZNUwkx4F/ACvcxB5gVioSjaTq/yTAWYiYp3EvQw4CBOIPRBzZ7DMD58KMTUOB+3f9+rAK7ce4tbgE+w1kZfQOwkn2htTIUCddhjMtCzHjCvUzt5D4E2OX2aTMmIRZixhhfy+V+YsaYLGAhZozxNQsxY4yvWYgZY3zNQswY42sWYsYYX7MQM8b4moWYMcbXLMSMMb5mIWaM8TULMWOMr1mIGWN8zULMGONrFmLGGF+zEDPG+JqFmDHG1yzEjDG+ZiFmjPE1CzFjjK9ZiBljfM1CzBjjaxZixhhfsxAzxviahZgxxtcsxIwxvmYhZozxNQsxY4yv/X9/WLY5nEwodQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.pie(\n",
    "    df_user['age'].value_counts().sort_index(),\n",
    "    labels = ['undefined','shaoer','qingshaonian','qingnian','zhognnian','laonian']\n",
    ")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 分析打分表"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>User-ID</th>\n",
       "      <th>ISBN</th>\n",
       "      <th>Book-Rating</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>276725</td>\n",
       "      <td>034545104X</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>276726</td>\n",
       "      <td>0155061224</td>\n",
       "      <td>5.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>276727</td>\n",
       "      <td>0446520802</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>276729</td>\n",
       "      <td>052165615X</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>276729</td>\n",
       "      <td>0521795028</td>\n",
       "      <td>6.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   User-ID        ISBN  Book-Rating\n",
       "0   276725  034545104X          0.0\n",
       "1   276726  0155061224          5.0\n",
       "2   276727  0446520802          0.0\n",
       "3   276729  052165615X          3.0\n",
       "4   276729  0521795028          6.0"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_rating = pd.read_csv('./1.用户冷启动/data/BX-Book-Ratings.csv',sep=';')\n",
    "df_rating.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>item_id</th>\n",
       "      <th>rating</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>276725</td>\n",
       "      <td>034545104X</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>276726</td>\n",
       "      <td>0155061224</td>\n",
       "      <td>5.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>276727</td>\n",
       "      <td>0446520802</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>276729</td>\n",
       "      <td>052165615X</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>276729</td>\n",
       "      <td>0521795028</td>\n",
       "      <td>6.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   user_id     item_id  rating\n",
       "0   276725  034545104X     0.0\n",
       "1   276726  0155061224     5.0\n",
       "2   276727  0446520802     0.0\n",
       "3   276729  052165615X     3.0\n",
       "4   276729  0521795028     6.0"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_rating.columns = ['user_id','item_id','rating']\n",
    "df_rating.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 1149780 entries, 0 to 1149779\n",
      "Data columns (total 3 columns):\n",
      "user_id    1149780 non-null int64\n",
      "item_id    1149780 non-null object\n",
      "rating     1149772 non-null float64\n",
      "dtypes: float64(1), int64(1), object(1)\n",
      "memory usage: 26.3+ MB\n"
     ]
    }
   ],
   "source": [
    "df_rating.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 删除有误数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 1149772 entries, 0 to 1149779\n",
      "Data columns (total 3 columns):\n",
      "user_id    1149772 non-null int64\n",
      "item_id    1149772 non-null object\n",
      "rating     1149772 non-null float64\n",
      "dtypes: float64(1), int64(1), object(1)\n",
      "memory usage: 35.1+ MB\n"
     ]
    }
   ],
   "source": [
    "df_rating = df_rating.dropna()\n",
    "df_rating.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 用户活跃度"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "11676     13601\n",
       "198711     7550\n",
       "153662     6109\n",
       "98391      5891\n",
       "35859      5850\n",
       "          ...  \n",
       "158698        1\n",
       "17920         1\n",
       "277135        1\n",
       "275086        1\n",
       "187812        1\n",
       "Name: user_id, Length: 105282, dtype: int64"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "user_value_counts = df_rating['user_id'].value_counts()\n",
    "user_value_counts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYQAAAD4CAYAAADsKpHdAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAXyUlEQVR4nO3df2xdZ33H8fcnduKmLWmS1u2CHXAAiy2NYBArS2FCiADNgDX9g2qu1tWDTNFKGQU2sWRIQ/sjEgwErJoaiNrSlB9Ns8KWCFFKlYLYppDgUiBN0hCXQOImNKYtJSslTezv/jiP23Od4x+59/ra8fm8pKt77vec59zniVt/fM557rmKCMzMzGZNdQfMzGx6cCCYmRngQDAzs8SBYGZmgAPBzMyS5qnuQLUuu+yy6OjomOpumJmdVx5++OFfR0Rr0bpxA0HSncB7gBMRsWzEun8APg20RsSvU20DsBYYBD4UEQ+k+nLgLmAu8C3glogISS3A3cBy4CngLyLiF+P1q6Ojg97e3vE2MzOzHEm/HG3dRE4Z3QWsLtjpYuAdwJFcbSnQDVyZ2twmqSmt3gSsAzrTY3ifa4FnIuI1wOeAT02gT2ZmVmfjBkJEfB94umDV54CPAflPtq0BtkbEqYg4DPQBKyQtAuZFxK7IPgl3N3Btrs2WtHwfsEqSqhqNmZlVraqLypKuAZ6IiJ+MWNUGHM297k+1trQ8sl7RJiLOAM8Cl47yvusk9UrqHRgYqKbrZmY2inMOBEkXAh8H/rlodUEtxqiP1ebsYsTmiOiKiK7W1sJrImZmVqVqjhBeDSwBfiLpF0A78CNJf0D2l//i3LbtwLFUby+ok28jqRm4hOJTVGZmNonOORAiYm9EXB4RHRHRQfYL/Y0R8StgB9AtqUXSErKLx3si4jhwUtLKdH3gRmB72uUOoCctvxd4KHzHPTOzhhs3ECTdA+wCXiupX9La0baNiH3ANmA/8G3g5ogYTKtvAm4nu9D8OHB/qt8BXCqpD/gosL7KsZiZWQ10vv4x3tXVFdV8DuGHv3ia//7ZAB98Wydzmv1BbTMrF0kPR0RX0brS/Ub80S+f4daH+jgzNDTVXTEzm1ZKFwhmZlbMgWBmZoADwczMEgeCmZkBJQ6E83RylZnZpCldIPi2eWZmxUoXCGZmVsyBYGZmgAPBzMwSB4KZmQElDgRPMjIzq1S6QFDh9/GYmVnpAsHMzIo5EMzMDHAgmJlZUtpAOF+/GMjMbLKULhB86wozs2KlCwQzMyvmQDAzM2ACgSDpTkknJD2aq31a0mOSfirpPyXNz63bIKlP0kFJV+fqyyXtTetulbKTN5JaJN2b6rslddR3iGZmNhETOUK4C1g9ovYgsCwiXgf8DNgAIGkp0A1cmdrcJqkptdkErAM602N4n2uBZyLiNcDngE9VOxgzM6veuIEQEd8Hnh5R+05EnEkvfwC0p+U1wNaIOBURh4E+YIWkRcC8iNgV2fSeu4Frc222pOX7gFXDRw+TyXOMzMwq1eMawvuB+9NyG3A0t64/1drS8sh6RZsUMs8Cl9ahX2Zmdg5qCgRJHwfOAF8dLhVsFmPUx2pT9H7rJPVK6h0YGDjX7pqZ2RiqDgRJPcB7gL+Mlz7l1Q8szm3WDhxL9faCekUbSc3AJYw4RTUsIjZHRFdEdLW2tlbbdTMzK1BVIEhaDfwjcE1E/C63agfQnWYOLSG7eLwnIo4DJyWtTNcHbgS259r0pOX3Ag+FP0ZsZtZwzeNtIOke4K3AZZL6gU+QzSpqAR5M139/EBF/GxH7JG0D9pOdSro5IgbTrm4im7E0l+yaw/B1hzuAL0vqIzsy6K7P0MzM7FyMGwgRcX1B+Y4xtt8IbCyo9wLLCuq/B64brx/15mMQM7NKpfukcgNmtJqZnZdKFwhmZlbMgWBmZoADwczMEgeCmZkBZQ4EzzIyM6tQukDwHCMzs2KlCwQzMyvmQDAzM8CBYGZmiQPBzMyAEgdCeJqRmVmF0gWCb2VkZlasdIFgZmbFHAhmZgY4EMzMLCltIPgLcszMKpUuEHxN2cysWOkCwczMijkQzMwMmEAgSLpT0glJj+ZqCyU9KOlQel6QW7dBUp+kg5KuztWXS9qb1t2q9OXGklok3ZvquyV11HeIZmY2ERM5QrgLWD2ith7YGRGdwM70GklLgW7gytTmNklNqc0mYB3QmR7D+1wLPBMRrwE+B3yq2sGYmVn1xg2EiPg+8PSI8hpgS1reAlybq2+NiFMRcRjoA1ZIWgTMi4hdERHA3SPaDO/rPmDV8NHDZPIkIzOzStVeQ7giIo4DpOfLU70NOJrbrj/V2tLyyHpFm4g4AzwLXFplv8bVgKwxMzsv1fuictFv2xijPlabs3curZPUK6l3YGCgyi6amVmRagPhyXQaiPR8ItX7gcW57dqBY6neXlCvaCOpGbiEs09RARARmyOiKyK6Wltbq+y6mZkVqTYQdgA9abkH2J6rd6eZQ0vILh7vSaeVTkpama4P3DiizfC+3gs8lK4zmJlZAzWPt4Gke4C3ApdJ6gc+AXwS2CZpLXAEuA4gIvZJ2gbsB84AN0fEYNrVTWQzluYC96cHwB3AlyX1kR0ZdNdlZGZmdk7GDYSIuH6UVatG2X4jsLGg3gssK6j/nhQojeSDEDOzSqX7pLInGZmZFStdIJiZWTEHgpmZAQ4EMzNLHAhmZgaUOBA8x8jMrFLpAsGTjMzMipUuEMzMrJgDwczMAAeCmZklDgQzMwNKHAi+lZGZWaXyBYJvZmRmVqh8gWBmZoUcCGZmBjgQzMwsKW0ghG9eYWZWoXSB4EvKZmbFShcIZmZWzIFgZmZAjYEg6SOS9kl6VNI9ki6QtFDSg5IOpecFue03SOqTdFDS1bn6ckl707pbJX9YwMys0aoOBEltwIeArohYBjQB3cB6YGdEdAI702skLU3rrwRWA7dJakq72wSsAzrTY3W1/TIzs+rUesqoGZgrqRm4EDgGrAG2pPVbgGvT8hpga0SciojDQB+wQtIiYF5E7IqIAO7OtZk8nmRkZlah6kCIiCeAzwBHgOPAsxHxHeCKiDietjkOXJ6atAFHc7voT7W2tDyyPil8MsrMrFgtp4wWkP3VvwR4OXCRpBvGalJQizHqRe+5TlKvpN6BgYFz7bKZmY2hllNGbwcOR8RARJwGvgG8CXgynQYiPZ9I2/cDi3Pt28lOMfWn5ZH1s0TE5ojoioiu1tbWGrpuZmYj1RIIR4CVki5Ms4JWAQeAHUBP2qYH2J6WdwDdklokLSG7eLwnnVY6KWll2s+NuTZmZtYgzdU2jIjdku4DfgScAR4BNgMXA9skrSULjevS9vskbQP2p+1vjojBtLubgLuAucD96WFmZg1UdSAARMQngE+MKJ8iO1oo2n4jsLGg3gssq6Uv58qTjMzMKpXuk8ry3YzMzAqVLhDMzKyYA8HMzAAHgpmZJQ4EMzMDShwI4WlGZmYVShcIvpeRmVmx0gWCmZkVcyCYmRngQDAzs8SBYGZmQIkDIXw3IzOzCqULBE8yMjMrVrpAMDOzYg4EMzMDHAhmZpaUNhB86wozs0qlCwTfusLMrFjpAsHMzIo5EMzMDHAgmJlZUlMgSJov6T5Jj0k6IOkqSQslPSjpUHpekNt+g6Q+SQclXZ2rL5e0N627VfKZfjOzRqv1COHfgG9HxB8CrwcOAOuBnRHRCexMr5G0FOgGrgRWA7dJakr72QSsAzrTY3WN/RqXJxmZmVWqOhAkzQPeAtwBEBEvRMRvgDXAlrTZFuDatLwG2BoRpyLiMNAHrJC0CJgXEbsiIoC7c23qTr55hZlZoVqOEF4FDABfkvSIpNslXQRcERHHAdLz5Wn7NuBorn1/qrWl5ZH1s0haJ6lXUu/AwEANXTczs5FqCYRm4I3Apoh4A/Ac6fTQKIr+NI8x6mcXIzZHRFdEdLW2tp5rf83MbAy1BEI/0B8Ru9Pr+8gC4sl0Goj0fCK3/eJc+3bgWKq3F9TNzKyBqg6EiPgVcFTSa1NpFbAf2AH0pFoPsD0t7wC6JbVIWkJ28XhPOq10UtLKNLvoxlwbMzNrkOYa2/8d8FVJc4CfA+8jC5ltktYCR4DrACJin6RtZKFxBrg5IgbTfm4C7gLmAvenx6QK38zIzKxCTYEQET8GugpWrRpl+43AxoJ6L7Cslr5MmCcZmZkV8ieVzcwMcCCYmVniQDAzM8CBYGZmSWkDwZOMzMwqlS4QPMnIzKxY6QLBzMyKORDMzAxwIJiZWeJAMDMzwIFgZmZJ6QLBX9dsZlasdIFgZmbFHAhmZgY4EMzMLCltIPjWFWZmlUoXCL6kbGZWrHSBYGZmxRwIZmYGOBDMzCypORAkNUl6RNI30+uFkh6UdCg9L8htu0FSn6SDkq7O1ZdL2pvW3Sp/eszMrOHqcYRwC3Ag93o9sDMiOoGd6TWSlgLdwJXAauA2SU2pzSZgHdCZHqvr0K8xBZ5mZGaWV1MgSGoH3g3cniuvAbak5S3Atbn61og4FRGHgT5ghaRFwLyI2BURAdyda1N3PvYwMytW6xHC54GPAUO52hURcRwgPV+e6m3A0dx2/anWlpZH1s8iaZ2kXkm9AwMDNXbdzMzyqg4ESe8BTkTEwxNtUlCLMepnFyM2R0RXRHS1trZO8G3NzGwimmto+2bgGknvAi4A5kn6CvCkpEURcTydDjqRtu8HFufatwPHUr29oG5mZg1U9RFCRGyIiPaI6CC7WPxQRNwA7AB60mY9wPa0vAPoltQiaQnZxeM96bTSSUkr0+yiG3NtzMysQWo5QhjNJ4FtktYCR4DrACJin6RtwH7gDHBzRAymNjcBdwFzgfvTY1L5XkZmZpXqEggR8T3ge2n5KWDVKNttBDYW1HuBZfXoy3g8y8jMrJg/qWxmZoADwczMEgeCmZkBDgQzM0tKGwieZGRmVql0gSB/Z5qZWaHSBYKZmRVzIJiZGeBAMDOzxIFgZmZAiQMhfDMjM7MKpQsE38vIzKxY6QLBzMyKORDMzAxwIJiZWVLaQPAlZTOzSqUNBDMzq+RAMDMzwIFgZmaJA8HMzIAaAkHSYknflXRA0j5Jt6T6QkkPSjqUnhfk2myQ1CfpoKSrc/XlkvamdbdK/viYmVmj1XKEcAb4+4j4I2AlcLOkpcB6YGdEdAI702vSum7gSmA1cJukprSvTcA6oDM9VtfQrwnxnSvMzCpVHQgRcTwifpSWTwIHgDZgDbAlbbYFuDYtrwG2RsSpiDgM9AErJC0C5kXErshuMHR3rk3d+eDDzKxYXa4hSOoA3gDsBq6IiOOQhQZwedqsDTiaa9afam1peWS96H3WSeqV1DswMFCPrpuZWVJzIEi6GPg68OGI+O1YmxbUYoz62cWIzRHRFRFdra2t595ZMzMbVU2BIGk2WRh8NSK+kcpPptNApOcTqd4PLM41bweOpXp7Qd3MzBqolllGAu4ADkTEZ3OrdgA9abkH2J6rd0tqkbSE7OLxnnRa6aSklWmfN+bamJlZgzTX0PbNwF8BeyX9ONX+CfgksE3SWuAIcB1AROyTtA3YTzZD6eaIGEztbgLuAuYC96fHpBg+P+UvyDEzq1R1IETE/1B8/h9g1ShtNgIbC+q9wLJq+3IuZjdlB0WnBx0IZmZ5pfuk8uymLMNODw5NcU/MzKaXEgbC8BGCA8HMLK/EgeBTRmZmeaULhDnNPmVkZlakdIHgU0ZmZsUcCGZmBpQyELJTRi/4GoKZWYUSBkI6QjjjIwQzs7zyBoJPGZmZVXAgmJkZUMJAmDsn+5K2508PjrOlmVm5lC4QLprTRPMs8ZvfnZ7qrpiZTSulCwRJzL9wNs84EMzMKpQuEADmXziH3/zuhanuhpnZtFLKQFhw4Wyefs6BYGaWV8pAePn8uRx79vmp7oaZ2bRSykDovPxi+p95nmd8lGBm9qJSBsKbX3MZEfD9QwNT3RUzs2mjlIHwuvb5tL6shW29R/3dymZmSSkDoWmW+MBbX83/9j3Fbd973KFgZsY0CgRJqyUdlNQnaf1kv1/PVR28+3WL+PQDB7nuC7vY/uMnPBXVzEpN0+GvY0lNwM+AdwD9wA+B6yNi/2hturq6ore3t6b3HRoKvrbnCJu+9zhP/CabddQ2fy5LLruIRZdcwKUXt7Dwotm87ILZXNzSzIVzmpg7u4mW2U3MaZrF7GYxu2kWc5pm0TRLNM0Ss5Q9N0nMmsWL9dmzZqWxZh+OMzObCpIejoiuonXNje7MKFYAfRHxcwBJW4E1wKiBUA+zZokbVr6S61e8gkeOPMPuw09z8Fcn+eVTz9F34v946rlTk/rdyxKILCD04uusqIptdNa25F9XbJ+tHw6nWvtXq3pE33QI0Fq7UJ9/y/P/51mPn2XNe5gB/w63rOrkz1//8hp7cbbpEghtwNHc637gT0ZuJGkdsA7gFa94Rd3evGmW6OpYSFfHwop6RPDcC4P89vnTPHfqDM+fHuS5U4O8MDjE6TNDnB4c4oXBIU6dGWJoKBiMyJ6HgsHgxdrgULx4d9UIiLQQL76OF+vDr0k5FKkfI9cPH9hFbj/Z9tm6waGXtqlGUHsQ1uPgs9Zd1KcPNe5kWvw71OHnWXMfau7CjPh3qMd/D5fMnV37TgpMl0Aoisuz/tkiYjOwGbJTRpPeKYmLW5q5uGW6/DOZmU2e6XJRuR9YnHvdDhybor6YmZXSdAmEHwKdkpZImgN0AzumuE9mZqUyLc6FRMQZSR8EHgCagDsjYt8Ud8vMrFSmRSAARMS3gG9NdT/MzMpqupwyMjOzKeZAMDMzwIFgZmaJA8HMzIBpci+jakgaAH5ZZfPLgF/XsTvTlcc5s3icM8dUjvGVEdFatOK8DYRaSOod7eZOM4nHObN4nDPHdB2jTxmZmRngQDAzs6SsgbB5qjvQIB7nzOJxzhzTcoylvIZgZmZnK+sRgpmZjeBAMDMzoISBIGm1pIOS+iStn+r+jEfSYknflXRA0j5Jt6T6QkkPSjqUnhfk2mxI4zso6epcfbmkvWndrUrf4yepRdK9qb5bUkejx5n60STpEUnfTK9n3BhTX+ZLuk/SY+nnetVMG6ukj6T/Xh+VdI+kC2bCGCXdKemEpEdztYaMS1JPeo9DknomZYDZ1zOW40F2a+3HgVcBc4CfAEunul/j9HkR8Ma0/DLgZ8BS4F+B9am+HvhUWl6axtUCLEnjbUrr9gBXkX1D3f3An6X6B4AvpOVu4N4pGutHga8B30yvZ9wY0/tvAf4mLc8B5s+ksZJ9Je5hYG56vQ3465kwRuAtwBuBR3O1SR8XsBD4eXpekJYX1H18U/U/xVQ80g/ggdzrDcCGqe7XOY5hO/AO4CCwKNUWAQeLxkT2HRNXpW0ey9WvB76Y3yYtN5N9glINHlc7sBN4Gy8FwowaY3rveWS/LDWiPmPGykvfkb4wvf83gXfOlDECHVQGwqSPK79NWvdF4Pp6j61sp4yG/0Md1p9q54V0+PgGYDdwRUQcB0jPl6fNRhtjW1oeWa9oExFngGeBSydjDGP4PPAxYChXm2ljhOzodAD4Ujo9druki5hBY42IJ4DPAEeA48CzEfEdZtAYR2jEuBryu6tsgaCC2nkx71bSxcDXgQ9HxG/H2rSgFmPUx2rTEJLeA5yIiIcn2qSgNq3HmNNMdsphU0S8AXiO7DTDaM67saZz6GvITpO8HLhI0g1jNSmoTesxTlA9x9WQ8ZYtEPqBxbnX7cCxKerLhEmaTRYGX42Ib6Tyk5IWpfWLgBOpPtoY+9PyyHpFG0nNwCXA0/UfyajeDFwj6RfAVuBtkr7CzBrjsH6gPyJ2p9f3kQXETBrr24HDETEQEaeBbwBvYmaNMa8R42rI766yBcIPgU5JSyTNIbtos2OK+zSmNPvgDuBARHw2t2oHMDzToIfs2sJwvTvNVlgCdAJ70qHsSUkr0z5vHNFmeF/vBR6KdKKyESJiQ0S0R0QH2c/koYi4gRk0xmER8SvgqKTXptIqYD8za6xHgJWSLkx9WwUcYGaNMa8R43oAeKekBekI7J2pVl+NuAgznR7Au8hm6jwOfHyq+zOB/v4p2aHhT4Efp8e7yM4r7gQOpeeFuTYfT+M7SJq9kOpdwKNp3b/z0ifVLwD+A+gjm/3wqikc71t56aLyTB3jHwO96Wf6X2SzRmbUWIF/AR5L/fsy2Uyb836MwD1k10VOk/3VvrZR4wLen+p9wPsmY3y+dYWZmQHlO2VkZmajcCCYmRngQDAzs8SBYGZmgAPBzMwSB4KZmQEOBDMzS/4fu5GC0dQgqTYAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(\n",
    "    range(len(user_value_counts)),\n",
    "    user_value_counts\n",
    ")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 商品的流行程度"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0971880107    2502\n",
       "0316666343    1295\n",
       "0385504209     883\n",
       "0060928336     732\n",
       "0312195516     723\n",
       "              ... \n",
       "2020063220       1\n",
       "8476003161       1\n",
       "088101270X       1\n",
       "0373056524       1\n",
       "0533123054       1\n",
       "Name: item_id, Length: 340550, dtype: int64"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "item_value_counts = df_rating['item_id'].value_counts()\n",
    "item_value_counts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(\n",
    "    range(len(item_value_counts)),\n",
    "    item_value_counts\n",
    ")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 1149772 entries, 0 to 1149779\n",
      "Data columns (total 3 columns):\n",
      "user_id    1149772 non-null int64\n",
      "item_id    1149772 non-null object\n",
      "rating     1149772 non-null float64\n",
      "dtypes: float64(1), int64(1), object(1)\n",
      "memory usage: 35.1+ MB\n"
     ]
    }
   ],
   "source": [
    "df_rating.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 1149772 entries, 0 to 1149779\n",
      "Data columns (total 3 columns):\n",
      "user_id    1149772 non-null int64\n",
      "item_id    1149772 non-null object\n",
      "rating     1149772 non-null int32\n",
      "dtypes: int32(1), int64(1), object(1)\n",
      "memory usage: 30.7+ MB\n"
     ]
    }
   ],
   "source": [
    "df_rating['rating'] = df_rating['rating'].astype(int)\n",
    "df_rating.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 分析打分"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0     716108\n",
       "8     103733\n",
       "10     78609\n",
       "7      76456\n",
       "9      67541\n",
       "5      50974\n",
       "6      36923\n",
       "4       8904\n",
       "3       5995\n",
       "2       2759\n",
       "1       1770\n",
       "Name: rating, dtype: int64"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rating_value_counts = df_rating['rating'].value_counts()\n",
    "rating_value_counts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(\n",
    "    range(len(rating_value_counts)),\n",
    "    rating_value_counts\n",
    ")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 合并用户表与打分表"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>location</th>\n",
       "      <th>age</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>usa</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>usa</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>russia</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>portugal</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>united kingdom</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   user_id        location  age\n",
       "0        1             usa    0\n",
       "1        2             usa    3\n",
       "2        3          russia    0\n",
       "3        4        portugal    2\n",
       "4        5  united kingdom    0"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_user.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>item_id</th>\n",
       "      <th>rating</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>276725</td>\n",
       "      <td>034545104X</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>276726</td>\n",
       "      <td>0155061224</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>276727</td>\n",
       "      <td>0446520802</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>276729</td>\n",
       "      <td>052165615X</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>276729</td>\n",
       "      <td>0521795028</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   user_id     item_id  rating\n",
       "0   276725  034545104X       0\n",
       "1   276726  0155061224       5\n",
       "2   276727  0446520802       0\n",
       "3   276729  052165615X       3\n",
       "4   276729  0521795028       6"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_rating.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>location</th>\n",
       "      <th>age</th>\n",
       "      <th>item_id</th>\n",
       "      <th>rating</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2</td>\n",
       "      <td>usa</td>\n",
       "      <td>3</td>\n",
       "      <td>0195153448</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>7</td>\n",
       "      <td>usa</td>\n",
       "      <td>0</td>\n",
       "      <td>034542252</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>8</td>\n",
       "      <td>canada</td>\n",
       "      <td>0</td>\n",
       "      <td>0002005018</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>8</td>\n",
       "      <td>canada</td>\n",
       "      <td>0</td>\n",
       "      <td>0060973129</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>8</td>\n",
       "      <td>canada</td>\n",
       "      <td>0</td>\n",
       "      <td>0374157065</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   user_id location  age     item_id  rating\n",
       "0        2      usa    3  0195153448       0\n",
       "1        7      usa    0   034542252       0\n",
       "2        8   canada    0  0002005018       5\n",
       "3        8   canada    0  0060973129       0\n",
       "4        8   canada    0  0374157065       0"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_data = pd.merge(\n",
    "    df_user,\n",
    "    df_rating,\n",
    "    on='user_id',\n",
    "    how='inner',\n",
    ")\n",
    "df_data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 1149772 entries, 0 to 1149771\n",
      "Data columns (total 5 columns):\n",
      "user_id     1149772 non-null int64\n",
      "location    1149772 non-null object\n",
      "age         1149772 non-null int64\n",
      "item_id     1149772 non-null object\n",
      "rating      1149772 non-null int32\n",
      "dtypes: int32(1), int64(2), object(2)\n",
      "memory usage: 48.2+ MB\n"
     ]
    }
   ],
   "source": [
    "df_data.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 1149772 entries, 0 to 1149771\n",
      "Data columns (total 5 columns):\n",
      "user_id     1149772 non-null int64\n",
      "location    1149772 non-null object\n",
      "age         1149772 non-null int32\n",
      "item_id     1149772 non-null object\n",
      "rating      1149772 non-null int32\n",
      "dtypes: int32(2), int64(1), object(2)\n",
      "memory usage: 43.9+ MB\n"
     ]
    }
   ],
   "source": [
    "df_data['age'] = df_data['age'].astype(int)\n",
    "df_data.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 保存表"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [],
   "source": [
    "import _pickle as cPickle"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [],
   "source": [
    "cPickle.dump(\n",
    "    df_data,\n",
    "    open('./df_data.pkl','wb')\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [],
   "source": [
    "object1 = cPickle.load(\n",
    "    open('./df_data.pkl','rb')\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "         user_id location  age     item_id  rating\n",
      "0              2      usa    3  0195153448       0\n",
      "1              7      usa    0   034542252       0\n",
      "2              8   canada    0  0002005018       5\n",
      "3              8   canada    0  0060973129       0\n",
      "4              8   canada    0  0374157065       0\n",
      "...          ...      ...  ...         ...     ...\n",
      "1149767   278854      usa    0  0425163393       7\n",
      "1149768   278854      usa    0  0515087122       0\n",
      "1149769   278854      usa    0  0553275739       6\n",
      "1149770   278854      usa    0  0553578596       0\n",
      "1149771   278854      usa    0  0553579606       8\n",
      "\n",
      "[1149772 rows x 5 columns]\n"
     ]
    }
   ],
   "source": [
    "print(object1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>location</th>\n",
       "      <th>age</th>\n",
       "      <th>item_id</th>\n",
       "      <th>rating</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2</td>\n",
       "      <td>usa</td>\n",
       "      <td>3</td>\n",
       "      <td>0195153448</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>7</td>\n",
       "      <td>usa</td>\n",
       "      <td>0</td>\n",
       "      <td>034542252</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>8</td>\n",
       "      <td>canada</td>\n",
       "      <td>0</td>\n",
       "      <td>0002005018</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>8</td>\n",
       "      <td>canada</td>\n",
       "      <td>0</td>\n",
       "      <td>0060973129</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>8</td>\n",
       "      <td>canada</td>\n",
       "      <td>0</td>\n",
       "      <td>0374157065</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   user_id location  age     item_id  rating\n",
       "0        2      usa    3  0195153448       0\n",
       "1        7      usa    0   034542252       0\n",
       "2        8   canada    0  0002005018       5\n",
       "3        8   canada    0  0060973129       0\n",
       "4        8   canada    0  0374157065       0"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "object1.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
